#ifndef __BLOQUE_H_INCLUDED__
#define __BLOQUE_H_INCLUDED__

class Bloque;

#include "Parametro.h"

class Bloque{
protected:
     unsigned cantParam;
     Parametro* parametros;
     uint64_t numero;		/**< Numero de este bloque dentro del
				 * sistema */
public:
     /** 
      * Comportamiento del bloque.
      * 
      * @param t Transaccion que ejecuta el bloque.
      * 
      * @return Devuelve 1 si se debe ejecutar otro bloque (esto es,
      * la transaccion sigue siendo la primera de la CEC)
      */
     virtual bool ejecutar(Transaccion& t)=0;
};

class Advance:Bloque{
public:
     bool ejecutar(Transaccion& t);
};

class Assign:Bloque{
private:
     bool suma,resta;
public:
     bool ejecutar(Transaccion& t);
};

class Buffer:Bloque{
public:
     bool ejecutar(Transaccion& t);
};

class Terminate:Bloque{
public:
     bool ejecutar(Transaccion& t);
};


#endif //__BLOQUE_H_INCLUDED__
